package com.sc.nft.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.entity.RankingBoardConf;
import com.sc.nft.entity.vo.*;
import com.sc.nft.enums.ExpenditureRecordTypeEnum;
import com.sc.nft.enums.RankingBoardIncomeAndRewardsStatusEnum;
import com.sc.nft.enums.RankingBoardTypeEnum;
import org.web3j.abi.datatypes.Int;

import java.math.BigDecimal;
import java.util.List;

/**
 * 排行榜配置表服务接口
 *
 * @author Sun
 * @since 2023-08-03 16:44:17
 * @description 由 Mybatisplus Code Generator 创建
 */
public interface AdminRankingBoardConfService {

    /**
     * 后台新增排行榜
     * @param rankingBoardConf
     */
    void addAdminRankingBoard(RankingBoardConf rankingBoardConf);

    /**
     * 排行榜关联奖励
     * @param id
     * @param rewardsSectionList
     */
    void addAdminRankingBoardRewards(Long id, List<AddRewardsSectionVO> rewardsSectionList);

    /**
     * 分页获取排行榜列表
     * @param expenditureRecordTypeEnum
     * @param pageNo
     * @param pageSize
     */
    Page<PageRankingBoardListByIncomeTypeVO> getPageRankingBoardListByIncomeType(ExpenditureRecordTypeEnum expenditureRecordTypeEnum, Integer pageNo, Integer pageSize);

    /**
     * 排行榜关联收益
     * @param id
     * @param list
     */
    void addRankingBoardIncome(Long id, List<AdminRankingBoardIncomeDetailsVO> list);

    /**
     * 分页获取排行榜数据
     * @param type
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<PageRankingBoardListByTypeVO> getPageRankingBoardListByType(RankingBoardTypeEnum type, Integer pageNo, Integer pageSize, String name, String beginTime, String endTime, String linkCollectonName, Integer isEnable);

    /**
     * 更新排行榜是否启用
     * @param id
     * @param isEnable
     */
    void updateRankingBoardIsEnable(Long id, Boolean isEnable);

    /**
     * 更新排行榜是否开启奖励
     * @param id
     * @param isOpenRewards
     */
    void updateRankingBoardIsOpenRewards(Long id, Boolean isOpenRewards);

    /**
     * 更新排行榜排序
     * @param id
     * @param sort
     */
    void updateRankingBoardSort(Long id, Integer sort);

    /**
     * 更新排行榜最小数量
     * @param id
     * @param minimumQuantity
     */
    void updateRankingBoardMinimumQuantity(Long id, Integer minimumQuantity, String ruleSpecification);

    /**
     * 获取排行榜详情
     * 1.如果排行榜已经结算了   则查询历史记录表的记录
     * 2.排行版未结算  则判断当前时间是奇数还是偶数 分别查询不同表的数据
     *  2.1如果是偶数  偶数表数据为空 则返回奇数表数据
     *  2.2如果是奇数  奇数表数据为空 则返回偶数表数据
     * @param id
     * @param userTel
     * @return
     */
    List<GetRankingBoardDetailsVO> getRankingBoardDetails(Long id, String userTel);

    /**
     * 删除排行榜
     * @param id
     */
    void delRankingBoard(Long id);

    /**
     * 获取排行榜的奖励
     * @param id
     * @return
     */
    List<AdminRankingBoardRewardsDetailsVO> getRankingBoardRewardsDetails(Long id);

    /**
     * 获取排行榜的收益配置
     * @param id
     * @return
     */
    List<AdminRankingBoardIncomeDetailsVO> getRankingBoardIncomeDetails(Long id);

    /**
     * 删除排行榜的收益
     * @param id
     */
    void delRankingBoardIncomeDetails(Long id,Integer beginSection,Integer endSection);

    /**
     * 关联市值账号
     * @param id
     * @param userTel
     */
    void addMarketValueAccount(Long id, String userTel);

    /**
     * 修改排行榜中某个人的发放状态
     * @param id
     * @param ranking
     * @param status
     */
    void updateRankingBoardDetailsStatusByUser(Long id, Integer ranking, RankingBoardIncomeAndRewardsStatusEnum status);
}
